查看原文
其他

Python进阶系列连载(1)——那些容易被忽略的问题(上)

2017-12-04 王大伟 Python爱好者社区

作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


前言

哈喽,大家好,入门部分连载一路走过来,得到了很多好评


原因主要是:

1.通俗易懂

2.幽默风趣


我将延续这个传统,继续进阶部分的连载


如果还没看过我的入门连载部分,先看:

Python从零开始系列连载(25)——Python的random模块简单使用(入门知(姿)识(势)学习的最后一篇(片))


当然,小编的免费入门课程已经有咯,看过连载的朋友可以看看视频再快速梳理一遍~

视频传送门:点击文末阅读原文




因为个人原因,最近沉迷机器学习,所以最近连载速度可能不是很快,见谅


本篇我们来聊一聊一些在入门部分容易被忽略的问题


int()强制转换浮点数


在int()的强制转换浮点数时候,不管是正数还是负数,只取整数部分。



注意:这里不是向上或者向下取整,也不是四舍五入。


无限递归


还记得我们讲的俄罗斯套娃么,还记得数列求通项公式么,都用到了递归的思想

如果不记得了,记得回看入门教程哦~


递归是为了将问题简化为更小规模的同类型问题,最后加以解决。

但是有一种情况是递归时不断调用自身,达到不了最简单的情况(例如俄罗斯套娃一层层打开到最内层的)

所以一直找不到递归的出口

说了这么多,我们看个例子:



我们定义了一个函数名为recurse

然后函数体中调用自身


当我们运行调用这个函数时,系统抛出异常,意思是达到了最大的递归深度。

你可以认为系统设置了一个最大递归次数,如果超过这个次数还没解决问题,则抛出异常

简答点说,就是:绕来绕去你怎么还没解决问题,你是要上天么!




这种问题,我们要避免


字符串是不可变的


在入门阶段我们说过,字符串和元组是不可变的数据类型,那字符串的不可变体现在哪呢?

看个例子:


如果我想改名字,而且改的是姓【不要当真,只是为了举例子,我爸应该看不到这篇文章的】

我把姓 '王' 改为 ' 方',我就做了如下修改:



结果抛出异常,提示不让我修改,这体现了字符串的不可变性,如果你执意要改呢?


可以这样


联合使用字符串的切片和拼接完成~


一些遗漏的字符串方法


upper()和lower()方法


upper()能将一个字符串的字母全变成大写,lower()与之相反:




find()方法


find()可以在字符串中查找子串是否存在:



如果找到,返回的是子串的起始索引位置,例如Hello是从字符串索引0位置开始,空格是在索引5位置

当找不到子串时,返回-1,而不是抛出异常


还可以限定查找开始的索引位置:



我们知道,空格的索引是5,当我们从索引3开始往后找,能找到空格

当我们从索引7开始找,则返回没找到,因为索引7已经在索引5之后了


注意操作的返回值



我们用a来 接盘 , 啊呸!接收来自print的返回值,发现a是NoneType,所以print是没有返回值的




例如在列表中,你希望接收排序的结果,你可能会这样写:



发现这样是没有结果的!


你还能找出哪些容易犯错的地方呢?

人生苦短,我选Python!


下课!

作业:期待下一次连载【坏笑】

未完待续~


Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

0.小编的Python入门视频课程!!!

1.崔老师爬虫实战案例免费学习视频。

2.丘老师数据科学入门指导免费学习视频。

3.陈老师数据分析报告制作免费学习视频。

4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。

5.丘老师Python网络爬虫实战免费学习视频。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存